Function RICHARDSON_LUCY
Package
reconstruction
Short description
The Richardson-Lucy deconvolution algorithm
Usage
y = richardson_lucy(z, filter, options)
Input
z (numeric): The filtered signal to be deconvolved.
filter (struct): The filter used to obtain z, in the format of filters
from FILTER_BANK.
options (struct, optional): Different parameters, such as
rl_iter (numeric): The iterations to output. If multiple are
specified, they will be arranged in y as columns (default 32)
Output
y (numeric): The result of the algorithm.
Description
The Richardson-Lucy algorithm estimates a signal y from its convolution
z = y*h, where h is a filter, often lowpass. The algorithm is iterative
and converges to the pseudo-inverse of the convolution operator, which is
unstable when the Fourier transform of the filter takes values close to
zero. As a result, only a few iterations are used. For more details, see
[1] and [2].
References
[1] L. Lucy, “An iterative technique for the rectification of observed
distributions,” Astron. J., vol. 79, p. 745, 1974.
[2] W.H. Richardson, "Bayesian-based iterative method of image
restoration." JOSA vol. 62.1, p. 55-59, 1972.
function yn = richardson_lucy(z, filter, options)
if nargin < 3
options = struct();
options = fill_struct(options, 'rl_iter', 32);
yn = zeros(length(z),length(options.rl_iter));
h = realize_filter(filter, size(z,1));
h_filter = @(u)(real(ifft(fft(u).*h)));
ht_filter = @(u)(real(ifft(fft(u).*conj(h))));
y = z;
for n = 1:max(options.rl_iter)
zr = z./(h_filter(y));
y = y.*ht_filter(zr);
if ismember(n, options.rl_iter)
[~,k] = ismember(n, options.rl_iter);
yn(:,k) = y;
See also
List of all packages